Update Role Profiles

{ updateRolesByProfileId }

Used to assign and unassign user profiles to different roles.

Method

/API2/access/updateRolesByProfileId

  • API Section: /API2/access
  • API Version: 2.0
  • From Release: 2020.0
  • Method operates via POST actions only.
  • Input Parameters

    Name

    profileRolesData

    Object Type

    Description

    The profile-role object contains a list of all roles to add or remove for the specified profile.

    Output Response

    Successful Result Code

    200

    Response List Type

    Description of Response Type

    Returns a generic response object with the list of the added/removed role IDs Note that the response is returned as a list of items of this object type.

    Notes

    Provide the list of roles to add and a list of roles to delete for the specified profile.

    Examples
    Running Queries and Slicers programmatically (JavaScript):

    This example demonstrates how to run queries and slicers (parameters) programmatically to extract results.

    The example uses API authentication driven from JavaScript. See Authentication APIs for alternatives.

    // URL of the Pyramid installation and the path to the API 2.0 REST methods
    var pyramidURL = "http://mysite.com/api2/";
    
    
    // step 1: authenticate admin account and get token
    // NOTE: callApi method is a generic REST method shown below.
    let token = callApi("auth/authenticateUser",{
    	"data":{
    		"userName":"adminUser",
    		"password":"abc123!"
    	}
    },false);
    
    
    //step 2: get default tenant
    let defaultTenantResult = callApi("access/getDefaultTenant",{
    	"auth": token
    });
    let tenantId = defaultTenantResult.data;
    
    //step 3: retrieve all profiles for a specific tenant
    let getAllProfilesByTenantId= callApi("access/getAllProfilesByTenantId ",{
    	"tenantId": tenantId,
    	"auth": token
    });
    
    
    //step 4A: add a new profile called "Consumers" using the numeric approach
    
    //	build the numeric value by summing the bit switches for each item needed.
    // assume we want to have advanced (9) and discovery (3) choices on
    
    let bitNum = (2^3) + (2^9)
    
    
    let saveProfile= callApi("access/addProfile",{
    	"profileApiData": {
    		"name":"Consumers",
    		"description":"Basic tools for consumer user types",
    		"permissions":{"numeric":bitNum},
    		"tenantId":tenantId
    	},
    	"auth": token
    });
    
    let profileId = saveProfile.data.modifiedList[0].id
    
    //step 4B: add a new profile called "Consumers" using the array approach
    // assume we want to have advanced (9) and discovery (3) choices on
    
    let saveProfile2= callApi("access/addProfile",{
    	"profileApiData": {
    		"name":"Consumers",
    		"description":"Basic tools for consumer user types",
    		"permissions":{"permissionBitIndexList":[9,3]},
    		"tenantId":tenantId
    	},
    	"auth": token
    });
    
    let profileId = saveProfile2.data.modifiedList[0].id
    
    
    //step 5: creating roles
    let createRole=callApi("access/createRoles",{
    	"data": [{
    		"roleName": "prole1",
    		"tenantId": tenantId,
    		"isGroupRole": false
    	},{
    		"roleName": "prole2",
    		"tenantId": tenantId,
    		"isGroupRole": false
    	}],
    	"auth": token
    });
    let role1 = createRole.data.modifiedList[0].id;
    let role2 = createRole.data.modifiedList[1].id;
    log("created roles "+role1+","+role2);
    
    
    //step 6: bind new profile to role1
    let updateRolesByProfileId=callApi("access/updateRolesByProfileId",{
    	"profileRolesData": {
    		"profileId":profileId,
    		"rolesToAdd":[role1],
    		"rolesToRemove":[]
    	},
    	"auth": token
    });
    
    //step 7: retrieve all roles with a given profile
    let allProfileRoles= callApi("access/getAllRolesByProfileId",{
    	"profileId": profileId,
    	"auth": token
    });
    
    //step 8: delete the profile
    let deleteProfile= callApi("access/deleteProfile",{
    	"profileId": profileId,
    	"auth": token
    });
    
    
    // ##### optional generic logging method for debugging ##############
    function log(msg){
    	document.write(msg);
    	console.log(msg);
    }
    
    // ##### generic REST API calling method ##############
    function callApi(path,data,parseResult=true){
    	var xhttp = new XMLHttpRequest();
    	xhttp.open("POST", pyramidURL+path, false);
    	xhttp.send(JSON.stringify(data));
    	if(parseResult){
    		return JSON.parse(xhttp.responseText);
    	}else{
    		return xhttp.responseText;
    	}
    }